Syntax20b.Scn.Fnt ParcElems Alloc Syntax24b.Scn.Fnt Syntax10.Scn.Fnt Syntax10b.Scn.Fnt FoldElems (* AMIGA *) MODULE AmigaIFFParse; (* Ralf Degner 25.07.1995, OJ 30 Apr 96 *) IMPORT SYSTEM, E:=AmigaExec; iffparseBase- : E.LibraryPtr; iffparseVersion- : INTEGER; termEntry : E.TermEntry; CONST iffparseName*="iffparse.library"; read*= {}; write*= {0}; rwBits*= read+write; fSeek*= {1}; rSeek*= {2}; parseScan*= 0; parseStep*= 1; parseRawStep*= 2; sizeUnknown*= -1; IFFHandlePtr*= POINTER TO IFFHandle; IFFHandle*= RECORD stream*: LONGINT; flgas*: SET; depth*: LONGINT END; ContextNodePtr*= POINTER TO ContextNode; ContextNode*= RECORD(E.MinNode) id*: LONGINT; type*: LONGINT; size*: LONGINT; scan*: LONGINT END; StoredPropertyPtr*= POINTER TO StoredProperty; StoredProperty*= RECORD size*: LONGINT; data*: LONGINT END; IOClipReqPtr*= POINTER TO IOClipReq; IOClipReq*= RECORD device*: E.DevicePtr; unit*: LONGINT; command*: INTEGER; flags*: SHORTINT; error*: SHORTINT; actual*: LONGINT; length*: LONGINT; data*: LONGINT; offset*: LONGINT; clipID*: LONGINT END; ClipboardHandlePtr*= POINTER TO ClipboardHandle; ClipboardHandle*= RECORD cbport*: E.MsgPort; satisfyPort*: E.MsgPort END; CollectionItemPtr*= POINTER TO CollectionItem; CollectionItem*= RECORD next*: CollectionItemPtr; size*: LONGINT; data*: LONGINT END; PROCEDURE -ReturnD0 04EH,05EH, 04EH,075H; PROCEDURE AllocIFF*(): IFFHandlePtr; BEGIN SYSTEM.CALL( -30, iffparseBase ); ReturnD0 END AllocIFF; PROCEDURE OpenIFF*(iff: IFFHandlePtr; modes: SET): LONGINT; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 0, modes ); SYSTEM.CALL( -36, iffparseBase ); ReturnD0 END OpenIFF; PROCEDURE ParseIFF*(iff: IFFHandlePtr; control: LONGINT): LONGINT; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 0, control ); SYSTEM.CALL( -42, iffparseBase ); ReturnD0 END ParseIFF; PROCEDURE CloseIFF*(iff: IFFHandlePtr); BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.CALL( -48, iffparseBase ) END CloseIFF; PROCEDURE FreeIFF*(iff: IFFHandlePtr); BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.CALL( -54, iffparseBase ) END FreeIFF; PROCEDURE ReadChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 9, buf ); SYSTEM.PUTREG( 0, num ); SYSTEM.CALL( -60, iffparseBase ); ReturnD0 END ReadChunkBytes; PROCEDURE WriteChunkBytes*(iff: IFFHandlePtr; buf, num: LONGINT): LONGINT; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 9, buf ); SYSTEM.PUTREG( 0, num ); SYSTEM.CALL( -66, iffparseBase ); ReturnD0 END WriteChunkBytes; PROCEDURE PushChunk*(iff: IFFHandlePtr; type, id, size: LONGINT): LONGINT; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 0, type ); SYSTEM.PUTREG( 1, id ); SYSTEM.PUTREG( 2, size ); SYSTEM.CALL( -84, iffparseBase ); ReturnD0 END PushChunk; PROCEDURE PopChunk*(iff: IFFHandlePtr): LONGINT; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.CALL( -90, iffparseBase ); ReturnD0 END PopChunk; PROCEDURE PropChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 0, type ); SYSTEM.PUTREG( 1, id ); SYSTEM.CALL( -114, iffparseBase ); ReturnD0 END PropChunk; PROCEDURE StopChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 0, type ); SYSTEM.PUTREG( 1, id ); SYSTEM.CALL( -126, iffparseBase ); ReturnD0 END StopChunk; PROCEDURE CollectionChunk*(iff: IFFHandlePtr; type, id: LONGINT): LONGINT; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 0, type ); SYSTEM.PUTREG( 1, id ); SYSTEM.CALL( -138, iffparseBase ); ReturnD0 END CollectionChunk; PROCEDURE FindProp*(iff: IFFHandlePtr; type, id: LONGINT): StoredPropertyPtr; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 0, type ); SYSTEM.PUTREG( 1, id ); SYSTEM.CALL( -156, iffparseBase ); ReturnD0 END FindProp; PROCEDURE FindCollection*(iff: IFFHandlePtr; type, id: LONGINT): CollectionItemPtr; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.PUTREG( 0, type ); SYSTEM.PUTREG( 1, id ); SYSTEM.CALL( -162, iffparseBase ); ReturnD0 END FindCollection; PROCEDURE FindPropContext*(iff: IFFHandlePtr): ContextNodePtr; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.CALL( -168, iffparseBase ); ReturnD0 END FindPropContext; PROCEDURE CurrentChunk*(iff: IFFHandlePtr): ContextNodePtr; BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.CALL( -174, iffparseBase ); ReturnD0 END CurrentChunk; PROCEDURE ParentChunk*(contextNode: ContextNodePtr): ContextNodePtr; BEGIN SYSTEM.PUTREG( 8, contextNode ); SYSTEM.CALL( -180, iffparseBase ); ReturnD0 END ParentChunk; PROCEDURE InitIFFasDOS*(iff: IFFHandlePtr); BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.CALL( -234, iffparseBase ) END InitIFFasDOS; PROCEDURE InitIFFasClip*(iff: IFFHandlePtr); BEGIN SYSTEM.PUTREG( 8, iff ); SYSTEM.CALL( -240, iffparseBase ) END InitIFFasClip; PROCEDURE OpenClipboard*(unit: LONGINT): ClipboardHandlePtr; BEGIN SYSTEM.PUTREG( 0, unit ); SYSTEM.CALL( -246, iffparseBase ); ReturnD0 END OpenClipboard; PROCEDURE CloseClipboard*(clipHan: ClipboardHandlePtr); BEGIN SYSTEM.PUTREG( 8, clipHan ); SYSTEM.CALL( -252, iffparseBase ) END CloseClipboard; PROCEDURE Init; TYPE LibraryPtr=POINTER TO E.Library; VAR lib:LibraryPtr; BEGIN iffparseBase:=E.OpenLibrary(iffparseName,37); IF iffparseBase=0 THEN HALT(99) END; lib:=SYSTEM.VAL(LibraryPtr,iffparseBase); iffparseVersion:=lib.version END Init; PROCEDURE Term; BEGIN E.CloseLibrary( iffparseBase ) END Term; BEGIN Init; E.Register(termEntry, Term); END AmigaIFFParse.